const {
  dbCmd,
  LOG_TYPE,
  deviceCollection,
  userCollection,
} = require("../../common/constants");

async function logout() {
  const { deviceId } = this.getUniversalClientInfo();
  const uniIdToken = this.getUniversalUniIdToken();
  const payload = await this.uniIdCommon.checkToken(uniIdToken, {
    autoRefresh: false,
  });
  if (payload.errCode) {
    throw payload;
  }
  const uid = payload.uid;

  // 删除token
  await userCollection.doc(uid).update({
    token: dbCmd.pull(uniIdToken),
  });

  // 仅当device表的device_id和user_id均对应时才进行更新
  await deviceCollection
    .where({
      device_id: deviceId,
      user_id: uid,
    })
    .update({
      token_expired: 0,
    });
  await this.middleware.uniIdLog({
    data: {
      user_id: uid,
    },
    type: LOG_TYPE.LOGOUT,
  });
  return {
    errCode: 0,
  };
}

module.exports = {
  logout,
};
